package com.chushouya.manager.service.api.impl;

import com.chushouya.manager.dto.admin.article.ArticleApiQuery;
import com.chushouya.manager.dto.admin.banner.BannerApiListDTO;
import com.chushouya.manager.dto.admin.home.HomeDataDTO;
import com.chushouya.manager.dto.admin.home.HelpListDTO;
import com.chushouya.manager.dto.admin.home.UserReviewDTO;
import com.chushouya.manager.dto.api.home.HomeDataQueryDTO;
import com.chushouya.manager.service.api.ArticleApiService;
import com.chushouya.manager.service.api.BannerApiService;
import com.chushouya.manager.service.api.HomeApiService;
import com.general.framework.core.lang.Beans;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 首页数据接口服务实现类
 * 提供首页聚合数据查询功能
 *
 * @author chushouya
 */
@Service
public class HomeApiServiceImpl implements HomeApiService {

    @Resource
    private BannerApiService bannerApiService;

    @Resource
    private ArticleApiService articleApiService;


    @Override
    public HomeDataDTO homeData(HomeDataQueryDTO homeDataQueryDTO) {
        HomeDataDTO homeData = new HomeDataDTO();
        final String platform = homeDataQueryDTO.getPlatform();
        // 获取轮播图数据 (位置ID: 1 表示首页轮播图)
        List<BannerApiListDTO> bannerList = bannerApiService.selectList(200026L, platform, 5);
        homeData.setBanner(bannerList);

        // 获取导航数据 (位置ID: 2 表示首页导航)
        List<BannerApiListDTO> navigateList = bannerApiService.selectList(200004L, platform, 8);
        homeData.setNavigate(navigateList);

        // 获取帮助文章列表 (这里需要根据实际的文章分类来查询)
        List<HelpListDTO> helpList = getHelpArticles();
        homeData.setHelpList(helpList);

        // 获取用户评价列表 (这里先返回模拟数据，实际需要从评价表查询)
        List<UserReviewDTO> userReviews = getUserReviews();
        homeData.setUserReviews(userReviews);

        return homeData;
    }

    /**
     * 获取帮助文章列表
     * 这里需要根据实际的文章分类来查询帮助类文章
     */
    private List<HelpListDTO> getHelpArticles() {
        ArticleApiQuery query = new ArticleApiQuery();
        query.setCategoryId(200005L);
        query.setSize(5);
        return Beans.copyList(articleApiService.selectList(query), HelpListDTO.class);
    }

    /**
     * 生成虚拟用户评价数据
     *
     * @return 用户评价数据列表
     */
    private List<UserReviewDTO> getUserReviews() {
        // 虚拟用户姓名
        String[] names = {
                "张三", "李四", "王五", "赵六", "刘七", "宋八", "唐九", "朱十",
                "小红", "小明", "小芳", "小丽", "小爱", "小杰", "小强", "小飞"
        };

        // 虚拟评价内容
        String[] comments = {
                "收到了好评价，回收速度很快，上门服务很贴心。",
                "回收价格是我已经问了好几家最高的了，下次还会来！",
                "回收人员非常专业，对我的旧手机做了详细的评估，给出的价格很满意。",
                "这家平台做得真不错，可以收废旧手机，还能保护环境，非常赞赏。",
                "首次尝试回收服务，没想到这么方便，上门取货只用了半个小时就完成了。",
                "真的太方便了，不用自己跑去卖，上门来取，还带现金，喜欢这种服务方式。",
                "服务态度很好，专业知识也很丰富，让我知道了我这款手机的真实价值。",
                "高于市场行情的回收价，实在是太划算了！",
                "本来以为废旧手机没什么价值了，没想到还能换到这么多钱。",
                "流程非常规范，身份验证、合同签订都很正规，让人很放心。"
        };

        // 虚拟回收机型
        String[] phoneModels = {
                "iPhone X", "iPhone 11", "iPhone 12", "iPhone 13", "iPhone 14",
                "Huawei P30", "Huawei P40", "Huawei Mate 40", "Huawei Mate 50",
                "Xiaomi 12", "Xiaomi 13", "Xiaomi Note 10", "Xiaomi Mix 4",
                "OPPO Find X3", "OPPO Find X5", "OPPO Reno 8", "OPPO Reno 10",
                "vivo X80", "vivo X90", "vivo NEX 3", "vivo iQOO 9"
        };

        List<UserReviewDTO> reviews = new ArrayList<>();
        Random random = new Random();

        // 生成20条虚拟评价
        for (int i = 0; i < 20; i++) {
            UserReviewDTO review = new UserReviewDTO();

            // 随机生成评分，保证4.5-5.0之间，模拟良好评价
            double rating = 4.5 + (random.nextDouble() * 0.5);
            rating = Math.round(rating * 10.0) / 10.0; // 保留一位小数

            // 随机选取名字、评价内容和手机型号
            String name = names[random.nextInt(names.length)];
            String comment = comments[random.nextInt(comments.length)];
            String phone = phoneModels[random.nextInt(phoneModels.length)];

            // 生成评价时间，范围为过去一个月内
            LocalDateTime now = LocalDateTime.now();
            long randomDays = ThreadLocalRandom.current().nextLong(0, 30);
            long randomHours = ThreadLocalRandom.current().nextLong(0, 24);
            long randomMinutes = ThreadLocalRandom.current().nextLong(0, 60);
            LocalDateTime reviewTime = now.minusDays(randomDays).minusHours(randomHours).minusMinutes(randomMinutes);
            Date reviewDate = Date.from(reviewTime.atZone(ZoneId.systemDefault()).toInstant());

            // 随机头像 URL，使用随机数字生成不同头像
            int avatarId = random.nextInt(2) + 1;
            String avatarUrl = "https://image.huihuishou.com/assets/images/home/img_head" + avatarId + ".png";

            // 生成回收金额，根据手机型号进行分档
            int price;
            if (phone.contains("iPhone")) {
                price = random.nextInt(4000) + 1000; // iPhone 价格区间 1000-5000
            } else if (phone.contains("Huawei")) {
                price = random.nextInt(2700) + 800; // 华为价格区间 800-3500
            } else if (phone.contains("Xiaomi")) {
                price = random.nextInt(1900) + 600; // 小米价格区间 600-2500
            } else {
                price = random.nextInt(1500) + 500; // 其他品牌价格区间 500-2000
            }

            // 构建评价数据
            review.setId((long) (i + 1));
            review.setUserName(name);
            review.setAvatar(avatarUrl);
            review.setRating(rating);
            review.setComment(comment);
            review.setPhoneModel(phone);
            review.setRecoveryPrice(price);
            review.setCreatedAt(reviewDate);
            review.setLikes(random.nextInt(51)); // 点赞数 0-50

            reviews.add(review);
        }

        // 按照评价时间降序排序，最新的在前面
        reviews.sort((a, b) -> b.getCreatedAt().compareTo(a.getCreatedAt()));

        return reviews;
    }
}
